{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "电影评论数据分类sklearn版.ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": [],
      "include_colab_link": true
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "[View in Colaboratory](https://colab.research.google.com/github/tongzm/ml-python/blob/master/%E7%94%B5%E5%BD%B1%E8%AF%84%E8%AE%BA%E6%95%B0%E6%8D%AE%E5%88%86%E7%B1%BBsklearn%E7%89%88.ipynb)"
      ]
    },
    {
      "metadata": {
        "id": "z4y1BGo8eJkF",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "#source:https://towardsdatascience.com/multi-class-text-classification-with-scikit-learn-12f1e60e0a9f\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn.feature_selection import chi2\n",
        "from sklearn.feature_extraction.text import TfidfVectorizer\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.svm import LinearSVC\n",
        "from sklearn.model_selection import cross_val_score\n",
        "from sklearn.metrics import confusion_matrix\n",
        "import seaborn as sns\n",
        "\n",
        "%matplotlib inline"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "hQMgd7uig1zi",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 127
        },
        "outputId": "ae9ab3c6-bff5-4018-dc7a-f7f138b9e417"
      },
      "cell_type": "code",
      "source": [
        "from google.colab import drive\n",
        "drive.mount('/content/drive')"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdocs.test%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.photos.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fpeopleapi.readonly&response_type=code\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "cGiP9G0_hG2o",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "outputId": "1b484442-c748-4791-ee2d-1270bd057ed1"
      },
      "cell_type": "code",
      "source": [
        "df = pd.read_csv('./drive/My Drive/data/moives/train.tsv',sep='\\t')\n",
        "df.head()"
      ],
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>PhraseId</th>\n",
              "      <th>SentenceId</th>\n",
              "      <th>Phrase</th>\n",
              "      <th>Sentiment</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>1</td>\n",
              "      <td>1</td>\n",
              "      <td>A series of escapades demonstrating the adage ...</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2</td>\n",
              "      <td>1</td>\n",
              "      <td>A series of escapades demonstrating the adage ...</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>3</td>\n",
              "      <td>1</td>\n",
              "      <td>A series</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>4</td>\n",
              "      <td>1</td>\n",
              "      <td>A</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5</td>\n",
              "      <td>1</td>\n",
              "      <td>series</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   PhraseId  SentenceId                                             Phrase  \\\n",
              "0         1           1  A series of escapades demonstrating the adage ...   \n",
              "1         2           1  A series of escapades demonstrating the adage ...   \n",
              "2         3           1                                           A series   \n",
              "3         4           1                                                  A   \n",
              "4         5           1                                             series   \n",
              "\n",
              "   Sentiment  \n",
              "0          1  \n",
              "1          2  \n",
              "2          2  \n",
              "3          2  \n",
              "4          2  "
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 26
        }
      ]
    },
    {
      "metadata": {
        "id": "g9OT6G2EhZ-f",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "outputId": "4b51b12e-7330-4d5b-b142-402ff14484fa"
      },
      "cell_type": "code",
      "source": [
        "col = ['Phrase', 'Sentiment']\n",
        "df = df[col]\n",
        "#删除空值\n",
        "df = df[pd.notnull(df['Phrase'])]\n",
        "df.columns = ['Phrase', 'Sentiment']\n",
        "df.head()"
      ],
      "execution_count": 27,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Phrase</th>\n",
              "      <th>Sentiment</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>A series of escapades demonstrating the adage ...</td>\n",
              "      <td>1</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>A series of escapades demonstrating the adage ...</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>A series</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>A</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>series</td>\n",
              "      <td>2</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                                              Phrase  Sentiment\n",
              "0  A series of escapades demonstrating the adage ...          1\n",
              "1  A series of escapades demonstrating the adage ...          2\n",
              "2                                           A series          2\n",
              "3                                                  A          2\n",
              "4                                             series          2"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 27
        }
      ]
    },
    {
      "metadata": {
        "id": "SNT9SQEQhzIc",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 384
        },
        "outputId": "354a8339-6b77-4bf5-f742-2c186a9e0ab1"
      },
      "cell_type": "code",
      "source": [
        "import matplotlib.pyplot as plt\n",
        "fig = plt.figure(figsize=(8,6))\n",
        "df.groupby('Sentiment').Phrase.count().plot.bar(ylim=0)\n",
        "plt.show()"
      ],
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f1b25151a10>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "UJFCLE5RjN1m",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "31d911ad-dac3-4f4e-9553-f517210bcb81"
      },
      "cell_type": "code",
      "source": [
        "tfidf = TfidfVectorizer(sublinear_tf=True, stop_words='english')\n",
        "features = tfidf.fit_transform(df.Phrase)\n",
        "labels = df.Sentiment\n",
        "print(features.shape)"
      ],
      "execution_count": 33,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(156060, 14955)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "Pu8lR2SLjXME",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 279
        },
        "outputId": "379dc0a4-01bd-4b05-aab1-0d0c394ea5ce"
      },
      "cell_type": "code",
      "source": [
        "models = [\n",
        "    RandomForestClassifier(n_estimators=200, max_depth=3, random_state=0),\n",
        "    LinearSVC(),\n",
        "    MultinomialNB(),\n",
        "    LogisticRegression(random_state=0),\n",
        "]\n",
        "CV = 5\n",
        "cv_df = pd.DataFrame(index=range(CV * len(models)))\n",
        "entries = []\n",
        "for model in models:\n",
        "  model_name = model.__class__.__name__\n",
        "  accuracies = cross_val_score(model, features, labels, scoring='accuracy', cv=CV)\n",
        "  for fold_idx, accuracy in enumerate(accuracies):\n",
        "    entries.append((model_name, fold_idx, accuracy))\n",
        "cv_df = pd.DataFrame(entries, columns=['model_name', 'fold_idx', 'accuracy'])\n",
        "\n",
        "sns.boxplot(x='model_name', y='accuracy', data=cv_df)\n",
        "sns.stripplot(x='model_name', y='accuracy', data=cv_df, \n",
        "              size=8, jitter=True, edgecolor=\"gray\", linewidth=2)\n",
        "plt.show()"
      ],
      "execution_count": 34,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nMcaYNP8fInDIjvqf/c0AAAAASUVORK5CYII=\n",
            "text/plain": [
              "<matplotlib.figure.Figure at 0x7f1b25302050>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "nTsflQ1iUP1G",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "Lvk3QuEXVMel",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "e9eed135-41d5-4b73-d228-1694d060e043"
      },
      "cell_type": "code",
      "source": [
        "\n",
        "    "
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "[2]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "id": "fe9ZZfCUVi1D",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "id": "zpKP89BAWCSd",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}